package com.browsesoft.htmlcomponent;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;

import javax.servlet.ServletContext;

import com.browsesoft.Manager;
import com.browsesoft.PropertiesService;
import com.browsesoft.listener.ContextListener;
import com.browsesoft.util.FileHelper;

/**
 * 模板管理器
 */
public class TemplateManager extends UnicastRemoteObject implements
		TemplateManagerRMI, Manager, Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -3058811660236802441L;

	/**
	 * 单例
	 */
	private static TemplateManager instance;

	public static TemplateManager getInstance() {
		return instance;
	}

	public TemplateManager() throws Exception {
		TemplateManager.instance = this;
	}

	/**
	 * 空装载
	 * 
	 * @throws Exception
	 */
	public void load() throws Exception {
	}

	/**
	 * 根据ID号得到模板，没有实现
	 * 
	 * @param id
	 *            ID号
	 * @return 空
	 */
	public Object getObject(String id) {
		return null;
	}

	/**
	 * 取的所有模板的名字
	 * 
	 * @return 所有模板的名字
	 */
	public LinkedList getTemplateNames() throws RemoteException, Exception {
		LinkedList v = new LinkedList();
		// 得到文件路径
		ServletContext context = ContextListener.getContext();
		String path = PropertiesService.getProperty("template", "path");
		Set list = context.getResourcePaths(path);
		Iterator iter = list.iterator();
		while (iter.hasNext()) {
			String filePath = (String) iter.next();
			// 根据文件路径得到文件名
			String fileName = FileHelper.getFileName(filePath);
			// 把文件名放入列表中
			v.add(fileName);
		}
		return v;
	}

	/**
	 * 根据模板名字取的模板
	 * 
	 * @param name
	 *            模板名字
	 * @return 模板
	 */
	public Template getTemplateByName(String name) throws RemoteException,
			Exception {
		try {
			// 得到流程定义的路径
			String path = PropertiesService.getProperty("template", "path");
			// 生成模板
			Template template = new Template();
			// 设置模板名
			template.setName(name);
			// 设置模板内容
			template.setContent(path);
			return template;
		} catch (FileNotFoundException e) {
			throw new TemplateNotFoundException("模板不存在：" + name, e, name);
		}
	}

	public void synchronAdd(String className, Hashtable attributes) {
		// TODO Auto-generated method stub

	}

	public void synchronRemove(String id) {
		// TODO Auto-generated method stub

	}

	public void synchronUpdate(String id, Hashtable attributes) {
		// TODO Auto-generated method stub

	}
}

/**
 * 模板文件过滤， 只是读取后缀为html，xml，htm和xhtml的模板文件
 */
class templateFileNameFilter implements FilenameFilter {
	/**
	 * 过滤方法，符合后缀要求，返回ture，否则，false
	 */
	public boolean accept(File dir, String name) {
		String[] fileNames = dir.list();
		for (int i = 0; i < fileNames.length; i++) {
			if (fileNames[i].indexOf(".html") != -1
					|| fileNames[i].indexOf(".htm") != -1
					|| fileNames[i].indexOf(".xml") != -1
					|| fileNames[i].indexOf(".xhtml") != -1) {
				return true;
			}
		}
		return false;
	}
}
